// ==UserScript==
// @name        YE功能增强.06 - [友盟网]
// @description 
// @namespace   http://AsionTang.CN
// @copyright   2015+, AsionTang
// @author      AsionTang
// @version     150715.03.01.006
// @iconURL     http://www.umeng.com/favicon.ico
// @downloadURL https://bitbucket.org/AsionTang/52scriptlibrary/raw/default/YeJS/06.UMeng.user.js
// @match       http://www.umeng.com/apps/*/error_types*
// @grant       GM_setClipboard
// @grant       none
// ==/UserScript==

//================================================================
// 03.点击“空白”自动按错误信息排序，并且美化错误信息显示。
//================================================================
var headError = document.getElementById('error-table').children[0].children[0].children[1];
//点击“错误摘要”时，触发事件。
headError.onclick = formatName;
function formatName() {
    var list = document.getElementById('data-list');

    //因为设计大量DOM操作，先将父元素从其容器移除，批量操作完了，再添加回来。
    var p = list.parentElement;
    p.removeChild(list);

    //获取所有错误列表
    var items = list.children;

    //排序后的错误列表
    var items_new = [];
    var items_map = {};

    //将 额外的调试信息 换行、缩进 显示
    function getNewLine(count) {
        var newLine = '\n'
        while (count-- > 0)
            newLine += '　';
        return newLine;
    }
    //
    for (var i = 0; i < items.length; i++) {
        var item = items[i];
        //获取某条 错误摘要
        var info = item.children[1].children[0];
        //对摘要 切割 为字符串数组
        var infos = info.innerText.split('｜');

        //将数组中的最后一个元素作为 关键 错误信息 来排序用
        var key = infos.pop();

        //将其它剩下的作为额外的调试信息 换行缩进显示
        var newHtml = "";
        for (var j = 0; j < infos.length; j++)
            newHtml += getNewLine(j) + infos[j];

        info.innerHTML = key;
        info.outerHTML = info.outerHTML + '<br/><pre style="margin:0px;clear:both;padding:0px;color:lightgray;">' + newHtml + '</pre>';

        //将需要排序的东西放入数组，以便sort
        items_new.push(key);
        items_map[key] = item;
    }
    items_new.sort();

    //清空原来里面的元素
    list.innerHTML = "";

    //再将排序好的新元素添加到列表
    for (var i = 0; i < items_new.length; i++)
        list.appendChild(items_map[items_new[i]]);

    //将父元素一次添加回界面，一次性渲染。
    p.appendChild(list);
}

//================================================================
// 02.点击“应用版本”自动复制“错误详情A标签”到剪贴板
//================================================================
copyErrorAOutHtml();
function copyErrorAOutHtml() {
    //点击空白处，自动绑定列点击事件
    document.getElementById('doc').onclick = function() {
        $('#data-list tr').each(function(index, e) {
            //获取“应用版本”列
            var ele = e.children[2];
            //绑定点击事件
            ele.onclick = function() {
                var errorA = e.children[1].children[0];
                console.dir(errorA.outerHTML);
                var ali = '<li><a href="' + errorA.href + '">' + e.children[1].innerText + '</a></li>';
                //将信息拷贝到剪贴板
                GM_setClipboard(ali, {
                    type: 'text',
                    mimetype: 'text/plain'
                });
                //提示信息
                alert('复制网址成功');
            }
            ;
        });
    }
    ;
}

//================================================================
// 01.自动打开“自定义错误”Tab页面
//================================================================
autoOpenCustomerErrorTab();
function autoOpenCustomerErrorTab() {
    if (window.location.pathname.indexOf('error_types') == -1)
        return;
    document.getElementById('type-tab').getElementsByTagName('li')[1].click();
}
